import os
from datetime import datetime, timedelta

import pandas as pd
from tkinter import filedialog


def process_excel(filepath):
    df = pd.read_excel(filepath)
    print(df)
    save_file(df)


def save_file(df, name='excel'):
    filepath = filedialog.asksaveasfilename(defaultextension=".xlsx",
                                            filetypes=[("Excel files", "*.xlsx")], initialfile=name)
    if filepath:
        df.to_excel(filepath, index=False)
        print(f"文件已保存至 {filepath}")


def is_xls(filepath):
    # 获取文件扩展名
    _, extension = os.path.splitext(filepath)

    # 判断扩展名是否为 .xls 或 .xlsx
    if extension.lower() == '.xls':
        return True
    else:
        return False


def is_xlsx(filepath):
    # 获取文件扩展名
    _, extension = os.path.splitext(filepath)

    # 判断扩展名是否为'.xlsx'
    if extension.lower() == '.xlsx':
        return True
    else:
        return False


def get_mapping_data(filepath, sheet_name, header=0, orient='dict', column_name='员工UserID'):
    df = pd.read_excel(filepath, sheet_name=sheet_name, header=header)
    # 按姓名分组
    grouped = df.groupby('员工UserID')

    # 将分组结果转换为字典
    mapping_data = {name: group.to_dict(orient=orient) for name, group in grouped}

    return mapping_data


def format_date(date_str):
    """
    格式化日期。
    如果日期字符串为空或无效，则返回空字符串。
    """
    if pd.isna(date_str):
        return ''

    if isinstance(date_str, pd.Timestamp) or isinstance(date_str, datetime):
        return date_str.strftime('%Y-%m-%d')
    else:
        print(f"Warning: 输入数据类型错误，期望为字符串或日期对象，实际为 {type(date_str)}")
        return ''


def add_years_and_days(date_str, years=0, days=0):
    if date_str == '':
        return ''
    """
    添加年数和天数。
    """
    date_obj = datetime.strptime(date_str, '%Y-%m-%d')
    new_date = date_obj + timedelta(days=days, years=years)
    return new_date.strftime('%Y-%m-%d')
